package com.types;

import java.math.BigDecimal;

/**
 * 
 * @author lmaos
 *
 * <p>作者：张星宇</p>
 * <p>时间：2017年7月26日 下午2:21:22</p>
 * <p>说明:类型转换		</p>
 *
 */
public class NumberTypeTransform {
	
	
	/*
	 *  类型转换,任意对象转为为数字类型
	 *  首先从各种数字类型中看出来 所有数字类型都是Number的子类。
	 *  其次在分析,如果对象不是Number时候，将他作为一个字符串来转换数字。
	 *  如果无法转换则设置一个默认值。
	 *  Number 中可以调用 intValue,longValue,doubleValue等直接转换为需要等类型
	 */
	
	public static Number toNumber(Object arbitraryObject,Number def){
		if(arbitraryObject == null){
			return def;	// 为空时
		}
		if(arbitraryObject instanceof Number){
			return (Number)arbitraryObject;
		}
		try {
			return new BigDecimal(arbitraryObject.toString());
		} catch (Exception e) {
			return def;	// 转换失败
		}
	}
	public static int toInt(Object arbitraryObject,int def){
		return toNumber(arbitraryObject, def).intValue();
	}
	public static long toLong(Object arbitraryObject,long def){
		return toNumber(arbitraryObject, def).longValue();
	}
	public static float toFloat(Object arbitraryObject,float def){
		return toNumber(arbitraryObject, def).floatValue();
	}
	public static double toDouble(Object arbitraryObject,double def){
		return toNumber(arbitraryObject, def).doubleValue();
	}
	public static short toShort(Object arbitraryObject,short def){
		return toNumber(arbitraryObject, def).shortValue();
	}
	public static byte toByte(Object arbitraryObject,byte def){
		return toNumber(arbitraryObject, def).byteValue();
	}
}
